﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BanVeXemPhim_Presentation
{
    public partial class UserControlAdminThietLapMucVe : UserControl
    {
        public UserControlAdminThietLapMucVe()
        {
            InitializeComponent();
            buttonThemGiaVe.Enabled = false;
            buttonXoaGiaVe.Enabled = false;
            buttonCapNhatGiaVe.Enabled = false;
        }
        private DoiTuongMuaDTO[] _dsDoiTuongMua;
        public DoiTuongMuaDTO[] DsDoiTuongMua
        {
            get { return _dsDoiTuongMua; }
            set
            {
                _dsDoiTuongMua = value;
                if (_dsDoiTuongMua != null)
                {
                    if (_dsDoiTuongMua.Length > 0)
                    {
                        this.comboBoxDoiTuongMua.Items.Clear();
                        int n = this._dsDoiTuongMua.Length;
                        for (int i = 0; i < n; i++)
                        {
                            if (_dsDoiTuongMua[i] != null)
                            {
                                this.comboBoxDoiTuongMua.Items.Add(_dsDoiTuongMua[i].TenDoiTuong);
                            }

                        }
                    }
                }
            }
        }

        private LoaiGheDTO[] _dsLoaiGhe;
        public LoaiGheDTO[] DsLoaiGhe
        {
            get { return _dsLoaiGhe; }
            set
            {
                _dsLoaiGhe = value;
                if (_dsLoaiGhe != null)
                {
                    if (_dsLoaiGhe.Length > 0)
                    {
                        this.comboBoxLoaiGhe.Items.Clear();
                        int n = this._dsLoaiGhe.Length;
                        for (int i = 0; i < n; i++)
                        {
                            if (_dsLoaiGhe[i] != null)
                            {
                                this.comboBoxLoaiGhe.Items.Add(_dsLoaiGhe[i].TenLoaiGhe);
                            }

                        }
                    }
                }
            }
        }

        private PhienBanDTO[] _dsPhienBan;
        public PhienBanDTO[] DsPhienBan
        {
            get { return _dsPhienBan; }
            set
            {
                _dsPhienBan = value;
                if (_dsPhienBan != null)
                {
                    if (_dsPhienBan.Length > 0)
                    {
                        this.comboBoxPhienBan.Items.Clear();
                        int n = this._dsPhienBan.Length;
                        for (int i = 0; i < n; i++)
                        {
                            if (_dsPhienBan[i] != null)
                            {
                                this.comboBoxPhienBan.Items.Add(_dsPhienBan[i].TenPhienBan);
                            }

                        }
                    }
                }
            }
        }
        private void UserControlAdminThietLapMucVe_Load(object sender, EventArgs e)
        {
            UpdateDataGridViewGiaVe();
        }
        private void UpdateDataGridViewGiaVe()
        {
            GiaVeControl giaveControl = new GiaVeControl();
            DoiTuongMuaControl doituongmuaControl = new DoiTuongMuaControl();
            LoaiGheControl loaigheControl = new LoaiGheControl();
            PhienBanControl phienbanControl = new PhienBanControl();

            DsDoiTuongMua = doituongmuaControl.DanhSachDoiTuong();
            DsLoaiGhe = loaigheControl.LayDanhSachLoaiGhe();
            DsPhienBan = phienbanControl.LayDanhSachPhienBan();

            GiaVeDTO[] dsGiaVe = giaveControl.LayDanhSachGiaVe();
            dataGridViewDanhSachGiaVe.DataSource = dsGiaVe;
            dataGridViewDanhSachGiaVe.Tag = dsGiaVe;
            FitSize(dataGridViewDanhSachGiaVe);
        }
        private void FitSize(DataGridView gv)
        {
            Size fitSize = new Size();
            fitSize.Width = gv.Width;

            // get fit height
            fitSize.Height = gv.ColumnHeadersVisible ? gv.ColumnHeadersHeight : 0;
            if (gv.Rows.Count != 0)
            {
                if (gv.Rows.Count < 9)
                    fitSize.Height += gv.Rows[0].Height * (gv.Rows.Count+1);
                else
                    fitSize.Height += gv.Rows[0].Height * 9;
            }
            gv.Size = fitSize;
        }

        private void dataGridViewDanhSachGiaVe_MouseClick(object sender, MouseEventArgs e)
        {
            
            if (this.dataGridViewDanhSachGiaVe.Rows.Count!=0)
            {
                buttonXoaGiaVe.Enabled = true;
                buttonCapNhatGiaVe.Enabled = true;
                int index = this.dataGridViewDanhSachGiaVe.CurrentRow.Index;
                GiaVeDTO[] dsGiaVe = (GiaVeDTO[])this.dataGridViewDanhSachGiaVe.Tag;
                textBoxGiaVe.Text = dsGiaVe[index].GiaVe.ToString();
                //dateTimePickerN.Value = Convert.ToDateTime(dsGiaVe[index].Ngay.ToShortDateString());
                dateTimePickerGioBatDau.Value = Convert.ToDateTime(dsGiaVe[index].GioBatDau.ToShortTimeString());
                dateTimePickerGioKetThuc.Value = Convert.ToDateTime(dsGiaVe[index].GioKetThuc.ToShortTimeString());

                this.comboBoxDoiTuongMua.SelectedIndex = LayIndexDoiTuongMua(dsGiaVe[index].IdDoiTuong);
                //comboBoxDoiTuongMua.Text = comboBoxDoiTuongMua.;
                if (comboBoxDoiTuongMua.SelectedIndex == -1)
                {
                    comboBoxDoiTuongMua.Text = "Chọn đối tượng mua...";
                }

                this.comboBoxLoaiGhe.SelectedIndex = LayIndexLoaiGhe(dsGiaVe[index].LoaiGhe);
                if (comboBoxLoaiGhe.SelectedIndex == -1)
                {
                    comboBoxLoaiGhe.Text = "Chọn loại ghế...";
                }

                this.comboBoxPhienBan.SelectedIndex = LayIndexPhienBan(dsGiaVe[index].IdPhienBan);
                if (comboBoxPhienBan.SelectedIndex == -1)
                {
                    comboBoxPhienBan.Text = "Chọn phiên bản của phim...";
                }
                comboBoxThu.SelectedIndex = dsGiaVe[index].Thu -1;
                textBoxIdGiaVe.Text = dsGiaVe[index].IdGiaVe.ToString();
            }
           
        }

        private int LayIndexPhienBan(int id)
        {
            int n = DsPhienBan.Length;
            for (int i = 0; i < n; i++)
            {
                if (DsPhienBan[i].IdPhienBan== id)
                    return i;
            }
            return -1;
        }
        private int LayIndexLoaiGhe(int id)
        {
            int n = DsLoaiGhe.Length;
            for (int i = 0; i < n; i++)
            {
                if (DsLoaiGhe[i].IdLoaiGhe== id)
                    return i;
            }
            return -1;
        }
        private int LayIndexDoiTuongMua(int id)
        {
            int n = DsDoiTuongMua.Length;
            for (int i = 0; i < n; i++)
            {
                if (DsDoiTuongMua[i].IdDoiTuong == id)
                    return i;
            }
            return -1;
        }

        private void comboBoxLoaiGhe_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBoxDoiTuongMua.SelectedIndex>=0 && comboBoxLoaiGhe.SelectedIndex>=0 && comboBoxPhienBan.SelectedIndex>=0)
            {
                if (textBoxGiaVe.Text != "")
                {
                    buttonThemGiaVe.Enabled = true;
                    buttonCapNhatGiaVe.Enabled = true;
                }
                buttonXoaGiaVe.Enabled = true;
            }
            else
            {
                buttonThemGiaVe.Enabled = false;
                buttonCapNhatGiaVe.Enabled = false;
                buttonXoaGiaVe.Enabled = false;
            }
        }

        private void comboBoxDoiTuongMua_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBoxDoiTuongMua.SelectedIndex >= 0 && comboBoxLoaiGhe.SelectedIndex >= 0 && comboBoxPhienBan.SelectedIndex >= 0)
            {
                if (textBoxGiaVe.Text != "")
                {
                    buttonThemGiaVe.Enabled = true;
                    buttonCapNhatGiaVe.Enabled = true;
                }
                buttonXoaGiaVe.Enabled = true;
            }
            else
            {
                buttonThemGiaVe.Enabled = false;
                buttonCapNhatGiaVe.Enabled = false;
                buttonXoaGiaVe.Enabled = false;
            }
        }

        private void comboBoxPhienBan_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBoxDoiTuongMua.SelectedIndex >= 0 && comboBoxLoaiGhe.SelectedIndex >= 0 && comboBoxPhienBan.SelectedIndex >= 0)
            {
                if (textBoxGiaVe.Text != "")
                {
                    buttonThemGiaVe.Enabled = true;
                    buttonCapNhatGiaVe.Enabled = true;
                }
                buttonXoaGiaVe.Enabled = true;
            }
            else
            {
                buttonThemGiaVe.Enabled = false;
                buttonCapNhatGiaVe.Enabled = false;
                buttonXoaGiaVe.Enabled = false;
            }
        }

        private void textBoxGiaVe_TextChanged(object sender, EventArgs e)
        {
            if (comboBoxDoiTuongMua.SelectedIndex >= 0 && comboBoxLoaiGhe.SelectedIndex >= 0 && comboBoxPhienBan.SelectedIndex >= 0 && textBoxGiaVe.Text != "")
            {
                buttonThemGiaVe.Enabled = true;
                buttonCapNhatGiaVe.Enabled = true;
            }
            else
            {
                buttonThemGiaVe.Enabled = false;
                buttonCapNhatGiaVe.Enabled = false;
            }
        }
        private void LayThongTinGiaVe(ref GiaVeDTO giaveDto)
        {
            giaveDto.Thu = comboBoxThu.SelectedIndex+1;
            giaveDto.IdGiaVe = int.Parse(textBoxIdGiaVe.Text);
            giaveDto.GioBatDau = dateTimePickerGioBatDau.Value;
            giaveDto.GioKetThuc = dateTimePickerGioKetThuc.Value;
            if (textBoxGiaVe.Text=="")
            {
                textBoxGiaVe.Text = "0";
            }
            giaveDto.GiaVe = int.Parse(textBoxGiaVe.Text);
            giaveDto.IdDoiTuong = LayIdDoiTuongMua(comboBoxDoiTuongMua.Text);
            giaveDto.IdPhienBan = LayIdPhienBan(comboBoxPhienBan.Text);
            giaveDto.LoaiGhe = LayIdLoaiGhe(comboBoxLoaiGhe.Text);
        }
        private int LayIdLoaiGhe(string name)
        {
            int n = DsLoaiGhe.Length;
            for (int i = 0; i < n; i++)
            {
                if (name == DsLoaiGhe[i].TenLoaiGhe)
                    return DsLoaiGhe[i].IdLoaiGhe;
            }
            return -1;
        }
        private int LayIdPhienBan(string name)
        {
            int n = DsPhienBan.Length;
            for (int i = 0; i < n; i++)
            {
                if (name == DsPhienBan[i].TenPhienBan)
                    return DsPhienBan[i].IdPhienBan;
            }
            return -1;
        }
        private int LayIdDoiTuongMua(string name)
        {
            int n = DsDoiTuongMua.Length;
            for (int i = 0; i < n; i++)
            {
                if (name == DsDoiTuongMua[i].TenDoiTuong)
                    return DsDoiTuongMua[i].IdDoiTuong;
            }
            return -1;
        }
        private void buttonThemGiaVe_Click(object sender, EventArgs e)
        {
            try
            {
                GiaVeControl giaveControl = new GiaVeControl();
                GiaVeDTO giaveDto = new GiaVeDTO();
                LayThongTinGiaVe(ref giaveDto);
                if (giaveControl.KiemTraGiaVe(giaveDto))
                {
                    MessageBox.Show("Thông tin thiết lập giá vé đã tồn tại!");
                } 
                else
                {
                    giaveControl.ThemGiaVe(giaveDto);
                    MessageBox.Show("Thêm giá vé thành công!");
                    UpdateDataGridViewGiaVe();
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void buttonXoaGiaVe_Click(object sender, EventArgs e)
        {
            try
            {
                GiaVeControl giaveControl = new GiaVeControl();
                GiaVeDTO giaveDto = new GiaVeDTO();
                LayThongTinGiaVe(ref giaveDto);
                if (giaveControl.KiemTraGiaVe(giaveDto))
                {
                    giaveControl.XoaGiaVe(giaveDto);
                    MessageBox.Show("Xóa giá vé thành công!");
                    UpdateDataGridViewGiaVe();
                }
                else
                {
                    MessageBox.Show("Thông tin thiết lập giá vé không tồn tại!");
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void buttonCapNhatGiaVe_Click(object sender, EventArgs e)
        {
            try
            {
                GiaVeControl giaveControl = new GiaVeControl();
                GiaVeDTO giaveDto = new GiaVeDTO();
                LayThongTinGiaVe(ref giaveDto);
                giaveControl.CapNhatGiaVe(giaveDto);
                MessageBox.Show("Cập nhật giá vé thành công!");
                UpdateDataGridViewGiaVe();

            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void buttonXoaThongTinGiaVe_Click(object sender, EventArgs e)
        {
            buttonCapNhatGiaVe.Enabled = false;
            buttonThemGiaVe.Enabled = false;
            buttonXoaGiaVe.Enabled = false;
            comboBoxLoaiGhe.SelectedIndex = -1;
            comboBoxLoaiGhe.Text = "Chọn loại ghế...";
            comboBoxPhienBan.SelectedIndex = -1;
            comboBoxPhienBan.Text = "Chọn phiên bản của phim...";
            comboBoxDoiTuongMua.SelectedIndex = -1;
            comboBoxDoiTuongMua.Text = "Chọn đối tượng mua...";
            comboBoxThu.SelectedIndex = -1;
            comboBoxThu.Text = "Chọn thứ...";
            
            dateTimePickerGioBatDau.Value = Convert.ToDateTime(DateTime.Now.ToShortTimeString());
            dateTimePickerGioKetThuc.Value = Convert.ToDateTime(DateTime.Now.ToShortTimeString());
            textBoxGiaVe.Text = "0";
        }

        private void comboBoxLoaiGhe_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void comboBoxDoiTuongMua_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void comboBoxPhienBan_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void textBoxGiaVe_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Những ký tự ko được nhập
            if ((e.KeyChar < (char)'0' || e.KeyChar > (char)'9') && e.KeyChar != (char)Keys.Back)
            {
                e.Handled = true;//ko cho nhập vào textbox
            }
        }


    }
}

